#!/bin/bash

# 获取脚本所在目录
SCRIPT_DIR=$(dirname "$0")

# 定义日志文件路径
LOG_FILE="$SCRIPT_DIR/main.log"
PID_FILE="$SCRIPT_DIR/task.pid"

# 定义 Python 脚本路径
PYTHON_SCRIPT="$SCRIPT_DIR/main.py"

# 启动任务函数
start() {
    if [ -f "$PID_FILE" ] && kill -0 $(cat "$PID_FILE") 2>/dev/null; then
        echo "$(date): 任务已在运行中 (PID: $(cat "$PID_FILE"))。"
    else
        # 启动新的 nohup 任务，并记录 PID 到文件
        nohup python3 "$PYTHON_SCRIPT" > "$LOG_FILE" 2>&1 &
        echo $! > "$PID_FILE"
        echo "$(date): 新的 nohup 任务已启动 (PID: $(cat "$PID_FILE"))。"
    fi
}

# 停止任务函数
stop() {
    if [ -f "$PID_FILE" ]; then
        PID=$(cat "$PID_FILE")
        if kill -0 "$PID" 2>/dev/null; then
            kill "$PID"
            rm -f "$PID_FILE"
            echo "$(date): 任务已停止 (PID: $PID)。"
        else
            echo "$(date): 任务未运行 (无效 PID: $PID)。"
            rm -f "$PID_FILE"
        fi
    else
        echo "$(date): 任务未运行。"
    fi
}

# 查询任务状态函数
status() {
    if [ -f "$PID_FILE" ]; then
        PID=$(cat "$PID_FILE")
        if kill -0 "$PID" 2>/dev/null; then
            # 获取进程的启动时间
            START_TIME=$(ps -o lstart= -p "$PID")
            echo "$(date): 任务正在运行 (PID: $PID, 启动时间: $START_TIME)。"
        else
            echo "$(date): 任务未运行 (无效 PID: $PID)。"
            rm -f "$PID_FILE"
        fi
    else
        echo "$(date): 任务未运行。"
    fi
}

# 重启任务函数
restart() {
    stop
    sleep 5
    start
}

# 参数解析
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        restart
        ;;
    status)
        status
        ;;
    *)
        echo "用法: $0 {start|stop|restart}"
        exit 1
        ;;
esac